package com.zmn.plat.services.interfaces.message;

import java.util.List;

import com.zmn.common.dto.StatusDTO;
import com.zmn.plat.model.entity.message.MsgTemplate;
import com.zmn.plat.model.entity.message.MsgTemplateQuery;

/**
 * MsgTemplateConfigService 模板消息Service
 *
 * @author tanghongjun
 */
public interface MsgTemplateService {
    /**
     * 描述: MsgTemplate key 查询数据
     *
     * @param templateId
     * @return: MsgTemplate
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    MsgTemplate findByKey(Integer templateId);

    /**
     * 描述: 根据组ID、模板类型、渠道ID、城市ID查询模板信息
     *
     * @param groupId
     *            模板组ID
     * @param channelId
     *            渠道ID
     * @param cityId
     *            城市ID
     * @param msgTempType
     *            模板类型1,城市 2,渠道,3渠道城市,4 通用
     * @return MsgTemplate 模板信息
     * @auther tanghongjun
     * @since 2019/10/29 15:40
     */
    MsgTemplate findByGroupIdAndTypeAndChannelIdAndCityId(Integer groupId, Integer msgTempType, Integer channelId, Integer cityId);

    /**
     * 描述:查询最大key
     *
     * @return: templateId
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer findKeyForMax();

    /**
     * 描述: 根据查询条件分页查询
     *
     * @param query
     * @return: List<MsgTemplate>
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    List<MsgTemplate> listPageByQuery(MsgTemplateQuery query);

    /**
     * 描述: 根据查询条件查询所有数据
     *
     * @param query
     * @return: List<MsgTemplate>
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    List<MsgTemplate> listByQuery(MsgTemplateQuery query);

    /**
     * 描述: MsgTemplate 数据
     *
     * @return: List<MsgTemplate>
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    List<MsgTemplate> listAll();

    /**
     * 描述: 根据查询条件统计满足条件的数据条数
     *
     * @param query
     * @return: Integer
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer countByQuery(MsgTemplateQuery query);

    /**
     * 描述: 根据主键修改数据
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer updateByKey(MsgTemplate msgTemplate);

    /**
     * 描述: 根据主键修改基本信息
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: xiangjunming
     * @since: 2019/10/28 16:41
     */
    Integer updateBaseInfoByKey(MsgTemplate msgTemplate);

    /**
     * 描述: 根据主键修改消息内容
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: xiangjunming
     * @since: 2019/10/28 16:41
     */
    Integer updateContentByKey(MsgTemplate msgTemplate);

    /**
     * 描述: 根据主键修改消息模板的状态
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer updateStatus(MsgTemplate msgTemplate);

    /**
     * 描述: 批量修改状态
     *
     * @param dto
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/22 13:58
     */
    Integer updateStatusBatch(StatusDTO dto);

    /**
     * 更新排序
     *
     * @param templateId
     * @param sort
     * @param updater
     * @return
     * @author xiangjunming
     * @since: 2018/10/28 13:58
     */
    int updateSortByKey(Integer templateId, Integer sort, String updater);

    /**
     * 描述: 新增数据
     *
     * @param msgTemplate
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer insert(MsgTemplate msgTemplate);

    /**
     * 描述: 根据主键删除数据
     *
     * @param templateId
     * @return: 执行结果码
     * @auther: tanghongjun
     * @since: 2018/10/15 16:41
     */
    Integer deleteByKey(Integer templateId);

}
